// 给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
// 算法的时间复杂度应该为 O(log (m+n)) 。

// 示例 1：
// 输入：nums1 = [1,3], nums2 = [2]
// 输出：2.00000
// 解释：合并数组 = [1,2,3] ，中位数 2

// 示例 2：
// 输入：nums1 = [1,2], nums2 = [3,4]
// 输出：2.50000
// 解释：合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5

// 来源：力扣（LeetCode）
// 链接：https://leetcode.cn/problems/median-of-two-sorted-arrays
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function (nums1, nums2) {
  // 首先合并两个顺序数组
  let temp = [];
  while (nums1.length && nums2.length) {
    if (nums1[0] <= nums2[0]) {
      temp.push(nums1.shift());
    } else {
      temp.push(nums2.shift());
    }
  }
  if (!nums1.length) {
    temp = [...temp, ...nums2];
  }
  if (!nums2.length) {
    temp = [...temp, ...nums1];
  }
  // 再根据数组长度是奇数还是偶数来选择中位数的计算方法
  if (temp.length % 2 !== 0) {
    // 当数组长度是奇数的时候 直接返回第 Math.floor(length / 2) 位置上的元素
    return temp[Math.floor(temp.length / 2)];
  } else {
    // 长度是偶数的时候 计算Math.floor(length / 2)和Math.floor(length / 2 - 1)的平均值为中位数
    return (temp[temp.length / 2 - 1] + temp[temp.length / 2]) / 2;
  }
};

let nums1 = [1, 3];
let nums2 = [2, 4];
console.log(findMedianSortedArrays(nums1, nums2));
